package com.situ.mall.generic;

import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.List;

public class GenericDemo4 {

    //只带泛型特征的方法
    public void save1(List<?> list) {
        // 只能获取、迭代list;  不能编辑list
        // list.add("");
        for (Object o : list) {
            System.out.println(o);
        }
    }

    @Test
    public void test1() {
        List list = new ArrayList();
        list.add(1);
        save(list);
    }

    /**
     * list集合只能处理 Double/Float/Integer等类型
     * 限定元素范围：元素的类型要继承自Number类  (上限)
     * @param list
     */
    public void save(List<? extends Number> list) {
    }

    @Test
    public void testGeneric23() throws Exception {
        List<Double> list1 = new ArrayList<Double>();
        List<Float> list2 = new ArrayList<Float>();
        List<Integer> list3 = new ArrayList<Integer>();

        List<String> list4 = new ArrayList<String>();

        // 调用
        save(list1);
        save(list2);
        save(list3);
        // save(list4);
    }

    /**
     * super限定元素范围：必须是String父类   【下限】
     * @param list
     */
    public void save2(List<? super String> list) {
    }

    @Test
    public void testGeneric24() throws Exception {
        // 调用上面方法，必须传入String的父类
        List<Object> list1 = new ArrayList<Object>();
        List<String> list2 = new ArrayList<String>();

        List<Integer> list3 = new ArrayList<Integer>();
        //save2(list3);
    }
}
